package com.pactera.madp.cp.service.sync;

import com.pactera.madp.cp.api.dto.sync.SyncDTO;
import org.springframework.transaction.annotation.Transactional;

/**
 * @title 同步精编资讯-接口定义
 *   - ① 发起网络请求获取精编资讯数据
 *   - ② 根据类型同步精编资讯到同步表
 *   - ③ 根据类型同步精编资讯到业务表
 * @date 2022-06-11
 * @author Deming.Chang
 */
public interface SyncBetaChoreography {

    /**
     * 同步参数-KEY
     */
    String PARAMS_KEY_TYPES =  "types";

    /**
     * 处理同步参数，获取需要同步的精编资讯二级类别数组
     * @param dto   同步参数
     * @return 需要同步的精编资讯二级类别数组
     */
    String[] handleSyncParams(SyncDTO dto);

    /**
     * 同步精编资讯
     * @param types 需要同步的精编资讯二级类别数组
     * @return
     */
    Boolean syncChoreography(String[] types);

    /**
     * 贝塔资讯-精编同步
     *
     * @param dto 同步参数
     */

    @Transactional(rollbackFor = Exception.class)
    default void handler(SyncDTO dto) {
        // 1.0 处理同步参数
        String[] types = this.handleSyncParams(dto);
        // 2.0 同步精编资讯
        this.syncChoreography(types);
    }

}
